'use strict';

/**
 * @param {number[]} nums
 * @return {number}
 */
var firstMissingPositive = function (nums) {
  nums.sort((a, b) => a - b);
  const posNums = nums.filter((num) => num > 0);
  if (!isContinuousArray(posNums)) {
    const posInterval = createRangeArray(
      posNums[0],
      posNums[posNums.length - 1]
    );
    const missingNums = posInterval.filter((num) => !posNums.includes(num));
    console.log(missingNums);
    return missingNums[0];
  } else {
    return posNums[posNums.length - 1] + 1;
  }
};

function createRangeArray(start, end) {
  const array = [];
  for (let i = start; i <= end; i++) {
    array.push(i);
  }
  return array;
}

function isContinuousArray(arr) {
  // 如果数组为空或只有一个元素，则认为是连续的
  if (arr.length <= 1) return true;

  // 找出数组中的最大值和最小值
  const max = Math.max(...arr);
  const min = Math.min(...arr);

  // 计算数组的长度
  const length = arr.length;

  // 创建一个集合来检查是否有重复元素
  const uniqueElements = new Set(arr);

  // 判断是否满足连续条件
  return uniqueElements.size === length && max - min === length - 1;
}
